//定义理由处理函数

const bcryptjs = require('bcryptjs') //导入密码加密模块

const jwt = require('jsonwebtoken')// 导入生成 Token 字符串
const config = require('../config') //导入Token 加密字符
//导入函数模块
const db = require('../db') // 数据库
const select = 'select * from ev_users where username=?'
const insert = 'insert into ev_users set ? '

exports.regUser = function (req, res) { //注册
  const userinfo = req.body
  // if (!userinfo.username || !userinfo.password) {
  //   return res.cc('用户名或密码不能为空')
  // }
  // sql 语句中有问号占位符，
  db.query(select, userinfo.username, function (err, results) { //检测用户名是否重复 并且注册
    if (err) return res.cc('写入sql失败')

    if (results.length > 0) return res.cc('用户名重复，请更换')
    userinfo.password = bcryptjs.hashSync(userinfo.password, 10) //将密码加密
    
    // 执行注册sql
    db.query(insert, userinfo, function (err, results) {// 注册用户
      if (err) return res.cc('写入sql失败')
      if (results.affectedRows == 1) return res.cc(0, '注册成功')

    })

  })



}

exports.login = function (req, res) { //登录
  const userinfo = req.body //接受请求参数
  db.query(select, userinfo.username, function (err, results) {//检测用户名是否重复 并且注册
    if (err) return res.cc('写入sql失败')

    if (results.length <= 0) return res.cc('登录失败！')

    // 比对用户输入的密码和数据库中的密码
    const compareResult = bcryptjs.compareSync(userinfo.password, results[0].password)

    // 如果对比的结果等于 false, 则证明用户输入的密码错误
    if (!compareResult) return res.cc('登录失败！')


    const user = { ...results[0], password: '', user_pic: '' }

    let tokenStr = jwt.sign(user, config.jwtSecretKey, {//生成token字符串
      expiresIn: '10h', // token 有效期为 10 个小时
    })

    res.send({
      status: 0,
      message: '登录成功！',
      // 为了方便客户端使用 Token，在服务器端直接拼接上 Bearer 的前缀
      token: 'Bearer ' + tokenStr,
    })

  })


}